package maquinasam.sam;

public class Registro {
	// Mnemónicos de los registros de SAM
	public static final byte INVALID = -1;
	public static final byte CB = 0;	// Base del código
	public static final byte CT = 1;	// Tope del código
	public static final byte PB = 2;	// Base de las primitivas
	public static final byte PT = 3;	// Tope de las primitivas
	public static final byte SB = 4;	// Base de la pila
	public static final byte ST = 5;	// Tope de la pila
	public static final byte HB = 6;	// Base del heap
	public static final byte HT = 7;	// Tope del heap
	public static final byte LB = 8;	// Base local
	public static final byte L1 = 9;	// Base local 1
	public static final byte L2 = 10;	// Base local 2
	public static final byte L3 = 11;	// Base local 3
	public static final byte L4 = 12;	// Base local 4
	public static final byte L5 = 13;	// Base local 5
	public static final byte L6 = 14;	// Base local 6
	public static final byte CP = 15;	// Puntero de código
	
	// Atributos
	private byte id;	// Identificador del registro (mnemónico asociado) 
	private byte value;	// Valor del mismo (a qué posición de memoria apunta)
	
	// Constructor
	public Registro(byte id, byte value) {
		this.id = id;
		this.value = value;
	}
	
	// Getters & Setters
	public byte getId() {
		return id;
	}
	
	public void setId(byte id) {
		this.id = id;
	}
	
	public byte getValue() {
		return value;
	}
	
	public void setValue(byte value) {
		this.value = value;
	}

	public void incValue() {
		this.value++;
	}
	
	public void decValue() {
		this.value--;
	}
	
	public String toString() {
		return String.valueOf(getValue());
	}
}
